Most architectures went to 'static PIE' by default in 5.8.

You will probably need something like -fno-pie.

The entire exercise of writing asm which bootstraps without
the c runtime means you are very much on your own.

> This assembled and linked without problems on 5.7-release, but now when
> I try it on 5.8-release, I get an error:
> 
> $ as -o charset.o charset.S
> $ ld -Bstatic charset.o
> 
> ld: charset.o: relocation R_X86_64_32S against `a local symbol' can not
> be used when making a shared object; recompile with -fPIC
> charset.o: could not read symbols: Bad value
> 
> What's changed?
> 
> charset.S is fairly trivial:
> 
> .section ".note", "a"
> .p2align 2
> .long 0x08
> .long 0x04
> .long 0x01
> .ascii "OpenBSD\0"
> .long 0x00
> .p2align 2
> 
> .section .data
> bytestore: .quad 0x20
> welcome: .ascii "Characterset generator by Tati Chevron,  27/4/2015."
> .byte 0x0A
> newline: .quad 0x0A
> 
> .section .text
> .globl _start
> 
> _start:
> 
> mov $welcome, %rsi
> mov $1, %rdi
> mov $4, %rax
> mov $53, %rdx
> syscall
> 
> _loop:
> 
> push bytestore
> pop %rax
> cmp $0xFF, %rax
> jz _exit
> cmp $0x80, %rax
> jnz _skip
> call _nl
> push bytestore
> pop %rax
> _skip:
> 
> inc %rax
> mov %rax, bytestore
> 
> mov $4, %rax
> mov $1, %rdi
> mov $bytestore, %rsi
> mov $1, %rdx
> syscall
> 
> jmp _loop
> 
> _exit:
> call _nl
> mov $1, %rdi
> mov $1, %rax
> syscall
> 
> _nl:
> mov $4, %rax
> mov $1, %rdi
> mov $newline, %rsi
> mov $1, %rdx
> syscall
> ret
> 
> -- 
> Tati Chevron
> Perl and FORTRAN specialist.
> SWABSIT development and migration department.
> http://www.swabsit.com
> 

Reply via email to