[Pkg-pascal-devel] Bug#695547: sprint/bof @ Debconf to fix fpc bugs #695547 and #826300

Peter Green plugwash at debian.org
Wed Jul 6 00:31:54 UTC 2016


Tags 695547 +patch
Thanks

On 05/07/16 23:37, Steve McIntyre wrote:
> So Peter and I were talking a little earlier on #debian-arm,
Specifically we were talking about the arm tag/flag stuff. I haven't 
looked into the powerpc issue.  Freepascal has a chunk of platform/cpu 
specific assembler code that is used for mixed pascal/c programs to 
initialise both the freepascal runtime library and libc. The powerpc 
linux version of this file is located at rtl/linux/powerpc/cprt0.as . It 
would not surprise me if it was something to do with this init code.

It would be good to try and get a backtrace ("access violation" 
generally means that the freepascal runtime library trapped a segfault 
and turned it into an exception).

The remainder of this mail is about the arm tag/flag stuff.
>   and he
> was making good progress on fixing stuff. He may have stuff all done
> shortly, I guess... :-)
>    
I think i've fixed the arm tag/flag stuff. With the small patch attached 
I get the following.

root at odroidu2:/# readelf --file-header /usr/bin/fpc
ELF Header:
   Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
   Class:                             ELF32
   Data:                              2's complement, little endian
   Version:                           1 (current)
   OS/ABI:                            UNIX - System V
   ABI Version:                       0
   Type:                              EXEC (Executable file)
   Machine:                           ARM
   Version:                           0x1
   Entry point address:               0x100ec
   Start of program headers:          52 (bytes into file)
   Start of section headers:          410616 (bytes into file)
   Flags:                             0x5000400, Version5 EABI, hard-float ABI
   Size of this header:               52 (bytes)
   Size of program headers:           32 (bytes)
   Number of program headers:         4
   Size of section headers:           40 (bytes)
   Number of section headers:         8
   Section header string table index: 7
root at odroidu2:/#

root at odroidu2:/# readelf -a /usr/bin/fpc
ELF Header:
   Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
   Class:                             ELF32
   Data:                              2's complement, little endian
   Version:                           1 (current)
   OS/ABI:                            UNIX - System V
   ABI Version:                       0
   Type:                              EXEC (Executable file)
   Machine:                           ARM
   Version:                           0x1
   Entry point address:               0x100ec
   Start of program headers:          52 (bytes into file)
   Start of section headers:          410616 (bytes into file)
   Flags:                             0x5000400, Version5 EABI, hard-float ABI
   Size of this header:               52 (bytes)
   Size of program headers:           32 (bytes)
   Number of program headers:         4
   Size of section headers:           40 (bytes)
   Number of section headers:         8
   Section header string table index: 7


Section Headers:
   [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
   [ 0]                   NULL            00000000 000000 000000 00      0   0  0
   [ 1] .note.ABI-tag     NOTE            000100c0 0000c0 000020 00   A  0   0 16
   [ 2] .text             PROGBITS        000100e0 0000e0 0501a4 00  AX  0   0  4
   [ 3] .rodata           PROGBITS        00060288 050288 010828 00   A  0   0  8
   [ 4] .data             PROGBITS        00081000 061000 003395 00  WA  0   0  8
   [ 5] .bss              NOBITS          00084398 064395 00237c 00  WA  0   0  4
   [ 6] .ARM.attributes   ARM_ATTRIBUTES  00000000 064395 000021 00      0   0  1
   [ 7] .shstrtab         STRTAB          00000000 0643b6 000042 00      0   0  1
Key to Flags:
   W (write), A (alloc), X (execute), M (merge), S (strings)
   I (info), L (link order), G (group), T (TLS), E (exclude), x (unknown)
   O (extra OS processing required) o (OS specific), p (processor specific)

There are no section groups in this file.

Program Headers:
   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
   LOAD           0x000000 0x00010000 0x00010000 0x60ab0 0x60ab0 R E 0x10000
   LOAD           0x061000 0x00081000 0x00081000 0x03395 0x05714 RW  0x10000
   NOTE           0x0000c0 0x000100c0 0x000100c0 0x00020 0x00020 R   0x10
   GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0x10

  Section to Segment mapping:
   Segment Sections...
    00     .note.ABI-tag .text .rodata
    01     .data .bss
    02     .note.ABI-tag
    03

There is no dynamic section in this file.

There are no relocations in this file.

There are no unwind sections in this file.

No version information found in this file.

Displaying notes found at file offset 0x000000c0 with length 0x00000020:
   Owner                 Data size       Description
   GNU                  0x00000010       NT_GNU_ABI_TAG (ABI version tag)
     OS: Linux, ABI: 2.0.0
Attribute Section: aeabi
File Attributes
   Tag_CPU_name: "7-A"
   Tag_CPU_arch: v7
   Tag_CPU_arch_profile: Application
   Tag_ARM_ISA_use: Yes
   Tag_THUMB_ISA_use: Thumb-2
   Tag_FP_arch: VFPv3-D16
   Tag_ABI_VFP_args: VFP registers
root at odroidu2:/#

Which looks good to me, does it look ok to others here?

Some extracts from IRC for future reference.
<plugwash> does anyone know where I can find a decoder for 
.eabi_attribute statements ?
<--snip-->
* plugwash is trying to decipher the output of gcc -S but is struggling 
to find a list anywhere of what the numbers mean
<Sledge> ok...
<--snip-->
<Sledge> plugwash: I just tend to use readelf -A
<plugwash> what i'm trying to figure out is what I need to make fpc put 
in it's assembler files so the binaries come out tagged correctly
<Sledge> ack
<Sledge> I'm looking myself again, I added this stuff in binutils after all
<Sledge> but it's been a while
<Sledge> waiting on downloads ...
<--snip-->
<Sledge> plugwash: look at 3bfcb6528e6fb6a324b2e119f50f72a0674a1402 in 
git://sourceware.org/git/binutils-gdb.git for inspiration, maybe
* Sicelo009N (~sicelo at 137.158.22.65) has joined #debian-arm
<Sledge> (unfortunately that's a few changes pushed together)
<plugwash> looks like the numbers are in elfcpp/arm.h in the binutils source
<Sledge> yup
<plugwash> one thing that is puzzling me, how do tags relate to flags?
<Sledge> tags are in the attributes section, and are basically a list
<Sledge> flags are specifically added in the ELF header to make them 
easier to work with
<Sledge> (not sure if that's what you're asking)
<plugwash> more what I was meaning is where do flags come from?
<Sledge> ah, ok
<plugwash> does the compiler have to set them explicitly? (and if so 
how?) does the linker turn tags into flags? something else?
<vagrantc> when one flag loves another flag...
<Sledge> vagrantc: :-)
<Sledge> plugwash: the compiler will set tags on various objects as it runs
<Sledge> the linker will check for the union of the tags and flags set 
and set flags appropriately on the output objects
<Sledge> elf32_arm_post_process_headers() is important here
<plugwash> right, so If I set the tags correctly binutils should set the 
flags correctly?
<plugwash> ok, it seems .o files have meaninful tags but not meaninful flags
* TiN (~TiN at 00018ff4.user.oftc.net) has joined #debian-arm
<plugwash> ok, just tested it looks like tags in the assembler file 
remain as tags in the .o file and are then converted to flags by the linker.
<Sledge> yup
<plugwash> i'm guessing the critical tag is Tag_ABI_VFP_args correct?
<plugwash> looks like it, removing that tag results in a change of flags
<Sledge> yeah
<Sledge> (sorry, just changed rooms here)
* Sicelo009N has quit (Read error: Connection reset by peer)
<plugwash> ok, now to try and insert that into freepascal
* Sicelo009N (~sicelo at 137.158.22.65) has joined #debian-arm
<plugwash> i've just make a change to fpc which I hope will fix this, 
now for a testbuild
<Sledge> woo
<plugwash> btw one thing i've noticed about this issue is it only seems 
to affect "pure" pascal binaries, binaries that link against libc seem 
to pick up the tags from somewhere
<plugwash> I gtg
<Sledge> right
<Sledge> the things linking with libc will probably end up getting the 
right flags automatically by merging with the libc flags


-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: fpc.debdiff
URL: <http://lists.alioth.debian.org/pipermail/pkg-pascal-devel/attachments/20160706/29f2c471/attachment-0003.ksh>


More information about the Pkg-pascal-devel mailing list