Browse Source

Add dllprt0 for x86_64 (i386 version simply includes cprt0.as)

git-svn-id: trunk@23828 -
pierre 12 years ago
parent
commit
8d8509590f
5 changed files with 338 additions and 73 deletions
  1. 2 0
      .gitattributes
  2. 74 72
      rtl/openbsd/Makefile
  3. 4 1
      rtl/openbsd/Makefile.fpc
  4. 1 0
      rtl/openbsd/i386/dllprt0.as
  5. 257 0
      rtl/openbsd/x86_64/dllprt0.as

+ 2 - 0
.gitattributes

@@ -8481,6 +8481,7 @@ rtl/openbsd/errno.inc svneol=native#text/plain
 rtl/openbsd/errnostr.inc svneol=native#text/plain
 rtl/openbsd/i386/bsyscall.inc svneol=native#text/plain
 rtl/openbsd/i386/cprt0.as svneol=native#text/plain
+rtl/openbsd/i386/dllprt0.as svneol=native#text/plain
 rtl/openbsd/i386/prt0.as svneol=native#text/plain
 rtl/openbsd/i386/sighnd.inc svneol=native#text/plain
 rtl/openbsd/osdefs.inc svneol=native#text/plain
@@ -8506,6 +8507,7 @@ rtl/openbsd/unxsysc.inc svneol=native#text/plain
 rtl/openbsd/x86_64/bsyscall.inc svneol=native#text/plain
 rtl/openbsd/x86_64/cprt0.as svneol=native#text/plain
 rtl/openbsd/x86_64/crt0.s svneol=native#text/plain
+rtl/openbsd/x86_64/dllprt0.as svneol=native#text/plain
 rtl/openbsd/x86_64/gprt0.as svneol=native#text/plain
 rtl/openbsd/x86_64/prt0.as svneol=native#text/plain
 rtl/openbsd/x86_64/sighnd.inc svneol=native#text/plain

+ 74 - 72
rtl/openbsd/Makefile

@@ -783,220 +783,220 @@ ifeq ($(FULL_TARGET),jvm-android)
 override TARGET_IMPLICITUNITS+=exeinfo cp1251 cp1252 cp1253 cp437 cp646 cp850 cp866 cp8859_1 cp8859_5
 endif
 ifeq ($(FULL_TARGET),i386-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-haiku)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-symbian)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-nativent)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-iphonesim)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-android)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),m68k-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-amiga)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-wii)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc-aix)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),sparc-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),x86_64-netbsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),x86_64-solaris)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),x86_64-openbsd)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),x86_64-darwin)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),x86_64-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-darwin)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-gba)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-nds)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-symbian)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),arm-android)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc64-darwin)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc64-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),powerpc64-aix)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),avr-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),armeb-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),armeb-embedded)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),mips-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),mipsel-linux)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),jvm-java)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),jvm-android)
-override TARGET_LOADERS+=prt0 cprt0
+override TARGET_LOADERS+=prt0 cprt0 dllprt0
 endif
 ifeq ($(FULL_TARGET),i386-linux)
 override TARGET_RSTS+=math varutils typinfo variants classes sysconst dateutils
@@ -2820,6 +2820,8 @@ prt0$(OEXT) : $(CPU_TARGET)/$(PRT0).as
 	$(AS) -o $(UNITTARGETDIRPREFIX)prt0$(OEXT) $(CPU_TARGET)/$(PRT0).as
 cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
 	$(AS) -o $(UNITTARGETDIRPREFIX)cprt0$(OEXT) $(CPU_TARGET)/cprt0.as
+dllprt0$(OEXT) : $(CPU_TARGET)/dllprt0.as
+	$(AS) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(CPU_TARGET)/dllprt0.as
 $(SYSTEMUNIT)$(PPUEXT) : $(BSDINC)/$(SYSTEMUNIT).pp sysconst.inc systypes.inc syscalls.inc $(SYSDEPS)
 	$(COMPILER) -Us -Sg $(BSDINC)/$(SYSTEMUNIT).pp
 uuchar$(PPUEXT): $(SYSTEMUNIT)$(PPUEXT) $(INC)/uuchar.pp

+ 4 - 1
rtl/openbsd/Makefile.fpc

@@ -9,7 +9,7 @@ main=rtl
 fpcpackage=y
 
 [target]
-loaders=prt0 cprt0
+loaders=prt0 cprt0 dllprt0
 units=$(SYSTEMUNIT) uuchar objpas macpas iso7185 strings syscall baseunix \
       $(LINUXUNIT) unixtype unixutil unix ctypes bsd initc \
       $(CPU_UNITS) dos crt objects printer matrix rtlconsts \
@@ -126,6 +126,9 @@ prt0$(OEXT) : $(CPU_TARGET)/$(PRT0).as
 cprt0$(OEXT) : $(CPU_TARGET)/cprt0.as
         $(AS) -o $(UNITTARGETDIRPREFIX)cprt0$(OEXT) $(CPU_TARGET)/cprt0.as
 
+dllprt0$(OEXT) : $(CPU_TARGET)/dllprt0.as
+        $(AS) -o $(UNITTARGETDIRPREFIX)dllprt0$(OEXT) $(CPU_TARGET)/dllprt0.as
+
 #
 # System Units (System, Objpas, Strings)
 #

+ 1 - 0
rtl/openbsd/i386/dllprt0.as

@@ -0,0 +1 @@
+.include i386/cprt0.as

+ 257 - 0
rtl/openbsd/x86_64/dllprt0.as

@@ -0,0 +1,257 @@
+	.section ".note.openbsd.ident", "a"
+	.p2align 2
+	.long	8
+	.long	4
+	.long	1
+	.ascii "OpenBSD\0"
+	.long	0
+	.previous
+	.file	"crt0.c"
+	.globl	__progname
+	.section	.rodata
+.LC0:
+	.string	""
+	.section	.data.rel.local,"aw",@progbits
+	.align 8
+	.type	__progname, @object
+	.size	__progname, 8
+__progname:
+	.quad	.LC0
+#APP
+	 .text				
+	.align	8			
+	.globl	__start			
+	.globl	_start			
+_start:					
+__start:				
+	movq	%rbx,%r9		
+	movq	%rcx,%r8		
+	movq	%rdx,%rcx		
+	movq	(%rsp),%rdi		
+	leaq	16(%rsp,%rdi,8),%rdx	
+	leaq	8(%rsp),%rsi		
+	subq	$8,%rsp			
+	andq	$~15,%rsp		
+	addq	$8,%rsp			
+	jmp	___start		
+#NO_APP
+	.text
+	.globl	___start
+	.type	___start, @function
+___start:
+.LFB9:
+	pushq	%rbp
+.LCFI0:
+	movq	%rsp, %rbp
+.LCFI1:
+	subq	$64, %rsp
+.LCFI2:
+	movl	%edi, -20(%rbp)
+	movq	%rsi, -32(%rbp)
+	movq	%rdx, -40(%rbp)
+	movq	%rcx, -48(%rbp)
+	movq	%r8, -56(%rbp)
+	movq	%r9, -64(%rbp)
+	movq	environ@GOTPCREL(%rip), %rdx
+	movq	-40(%rbp), %rax
+	movq	%rax, (%rdx)
+	movq	operatingsystem_parameter_envp@GOTPCREL(%rip), %rdx
+	movq	-40(%rbp), %rax
+	movq	%rax, (%rdx)
+	movl	-20(%rbp), %eax
+	movslq	%eax,%rdx
+	movq	operatingsystem_parameter_argc@GOTPCREL(%rip), %rax
+	movq	%rdx, (%rax)
+	movq	operatingsystem_parameter_argv@GOTPCREL(%rip), %rdx
+	movq	-32(%rbp), %rax
+	movq	%rax, (%rdx)
+	movq	-32(%rbp), %rax
+	movq	(%rax), %rax
+	movq	%rax, -8(%rbp)
+	cmpq	$0, -8(%rbp)
+	je	.L2
+	movq	-8(%rbp), %rdi
+	movl	$47, %esi
+	call	_strrchr
+	movq	%rax, %rdx
+	movq	__progname@GOTPCREL(%rip), %rax
+	movq	%rdx, (%rax)
+	movq	__progname@GOTPCREL(%rip), %rax
+	movq	(%rax), %rax
+	testq	%rax, %rax
+	jne	.L4
+	movq	__progname@GOTPCREL(%rip), %rdx
+	movq	-8(%rbp), %rax
+	movq	%rax, (%rdx)
+	jmp	.L6
+.L4:
+	movq	__progname@GOTPCREL(%rip), %rax
+	movq	(%rax), %rax
+	leaq	1(%rax), %rdx
+	movq	__progname@GOTPCREL(%rip), %rax
+	movq	%rdx, (%rax)
+.L6:
+	movq	__progname_storage@GOTPCREL(%rip), %rax
+	movq	%rax, -16(%rbp)
+	jmp	.L7
+.L8:
+	movq	__progname@GOTPCREL(%rip), %rax
+	movq	(%rax), %rcx
+	movzbl	(%rcx), %edx
+	movq	-16(%rbp), %rax
+	movb	%dl, (%rax)
+	addq	$1, -16(%rbp)
+	leaq	1(%rcx), %rdx
+	movq	__progname@GOTPCREL(%rip), %rax
+	movq	%rdx, (%rax)
+.L7:
+	movq	__progname@GOTPCREL(%rip), %rax
+	movq	(%rax), %rax
+	movzbl	(%rax), %eax
+	testb	%al, %al
+	je	.L9
+	movq	__progname_storage@GOTPCREL(%rip), %rax
+	leaq	255(%rax), %rax
+	cmpq	%rax, -16(%rbp)
+	jb	.L8
+.L9:
+	movq	-16(%rbp), %rax
+	movb	$0, (%rax)
+	movq	__progname@GOTPCREL(%rip), %rdx
+	movq	__progname_storage@GOTPCREL(%rip), %rax
+	movq	%rax, (%rdx)
+.L2:
+	movl	$0, %eax
+	call	__init@PLT
+	movq	environ@GOTPCREL(%rip), %rax
+	movq	(%rax), %rdx
+	movq	-32(%rbp), %rsi
+	movl	-20(%rbp), %edi
+	movl	$0, %eax
+	call	main@PLT
+	# movl	%eax, %edi
+	# call	exit
+	jmp 	_haltproc@PLT
+        .p2align 2,0x90
+
+.globl _haltproc
+.type _haltproc,@function
+
+_haltproc:
+           movq $1,%rax
+           movzwq operatingsystem_result(%rip),%rbx
+           pushq   %rbx
+           call .Lactualsyscall
+           addq  $8,%rsp
+           jmp   _haltproc
+
+.Lactualsyscall:
+         int $0x80
+         jb .LErrorcode
+         xor %rbx,%rbx
+         ret
+.LErrorcode:
+	movl	%eax, %edi
+
+
+
+	call	exit@PLT
+.LFE9:
+	.size	___start, .-___start
+	.type	_strrchr, @function
+_strrchr:
+.LFB10:
+	pushq	%rbp
+.LCFI3:
+	movq	%rsp, %rbp
+.LCFI4:
+	movq	%rdi, -24(%rbp)
+	movb	%sil, -25(%rbp)
+	movq	$0, -8(%rbp)
+.L13:
+	movq	-24(%rbp), %rdx
+	movzbl	(%rdx), %eax
+	cmpb	-25(%rbp), %al
+	jne	.L14
+	movq	-24(%rbp), %rax
+	movq	%rax, -8(%rbp)
+.L14:
+	movq	-24(%rbp), %rdx
+	movzbl	(%rdx), %eax
+	testb	%al, %al
+	jne	.L16
+	movq	-8(%rbp), %rax
+	movq	%rax, -16(%rbp)
+	jmp	.L12
+.L16:
+	addq	$1, -24(%rbp)
+	jmp	.L13
+.L12:
+	movq	-16(%rbp), %rax
+	leave
+	ret
+.LFE10:
+	.size	_strrchr, .-_strrchr
+	.comm	environ,8,8
+	.comm	operatingsystem_parameter_envp,8,8
+	.comm	operatingsystem_parameter_argc,8,8
+	.comm	operatingsystem_parameter_argv,8,8
+	.comm	__progname_storage,256,32
+	.section	.eh_frame,"a",@progbits
+.Lframe1:
+	.long	.LECIE1-.LSCIE1
+.LSCIE1:
+	.long	0x0
+	.byte	0x1
+	.string	"zR"
+	.uleb128 0x1
+	.sleb128 -8
+	.byte	0x10
+	.uleb128 0x1
+	.byte	0x1b
+	.byte	0xc
+	.uleb128 0x7
+	.uleb128 0x8
+	.byte	0x90
+	.uleb128 0x1
+	.align 8
+.LECIE1:
+.LSFDE1:
+	.long	.LEFDE1-.LASFDE1
+.LASFDE1:
+	.long	.LASFDE1-.Lframe1
+	.long	.LFB9-.
+	.long	.LFE9-.LFB9
+	.uleb128 0x0
+	.byte	0x4
+	.long	.LCFI0-.LFB9
+	.byte	0xe
+	.uleb128 0x10
+	.byte	0x86
+	.uleb128 0x2
+	.byte	0x4
+	.long	.LCFI1-.LCFI0
+	.byte	0xd
+	.uleb128 0x6
+	.align 8
+.LEFDE1:
+.LSFDE3:
+	.long	.LEFDE3-.LASFDE3
+.LASFDE3:
+	.long	.LASFDE3-.Lframe1
+	.long	.LFB10-.
+	.long	.LFE10-.LFB10
+	.uleb128 0x0
+	.byte	0x4
+	.long	.LCFI3-.LFB10
+	.byte	0xe
+	.uleb128 0x10
+	.byte	0x86
+	.uleb128 0x2
+	.byte	0x4
+	.long	.LCFI4-.LCFI3
+	.byte	0xd
+	.uleb128 0x6
+	.align 8
+.LEFDE3:
+	.ident	"GCC: (GNU) 4.2.1 20070719 "