| Commit | Line | Data |
|---|---|---|
| 984263bc MD |
1 | /*- |
| 2 | * Copyright 1996, 1997, 1998, 2000 John D. Polstra. | |
| 3 | * All rights reserved. | |
| 4 | * | |
| 5 | * Redistribution and use in source and binary forms, with or without | |
| 6 | * modification, are permitted provided that the following conditions | |
| 7 | * are met: | |
| 8 | * 1. Redistributions of source code must retain the above copyright | |
| 9 | * notice, this list of conditions and the following disclaimer. | |
| 10 | * 2. Redistributions in binary form must reproduce the above copyright | |
| 11 | * notice, this list of conditions and the following disclaimer in the | |
| 12 | * documentation and/or other materials provided with the distribution. | |
| 13 | * | |
| 14 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | |
| 15 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | |
| 16 | * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | |
| 17 | * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | |
| 18 | * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | |
| 19 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
| 20 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
| 21 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
| 22 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | |
| 23 | * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
| 24 | * | |
| f4df8772 | 25 | * $FreeBSD: src/lib/csu/common/crtbrand.c SVN 217375 2011/01/13 dim $ |
| 984263bc MD |
26 | */ |
| 27 | ||
| 28 | #include <sys/param.h> | |
| 29 | ||
| ac794756 | 30 | #define ABI_VENDOR "DragonFly" |
| 984263bc MD |
31 | #define ABI_SECTION ".note.ABI-tag" |
| 32 | #define ABI_NOTETYPE 1 | |
| 33 | ||
| 34 | /* | |
| 35 | * Special ".note" entry specifying the ABI version. See | |
| 36 | * http://www.netbsd.org/Documentation/kernel/elf-notes.html | |
| 37 | * for more information. | |
| f4df8772 JM |
38 | * |
| 39 | * For all arches except sparc, gcc emits the section directive for the | |
| 40 | * following struct with a PROGBITS type. However, newer versions of binutils | |
| 41 | * (after 2.16.90) require the section to be of NOTE type, to guarantee that the | |
| 42 | * .note.ABI-tag section correctly ends up in the first page of the final | |
| 43 | * executable. | |
| 44 | * | |
| 45 | * Unfortunately, there is no clean way to tell gcc to use another section type, | |
| 46 | * so this C file (or the C file that includes it) must be compiled in multiple | |
| 47 | * steps: | |
| 48 | * | |
| 49 | * - Compile the .c file to a .s file. | |
| 50 | * - Edit the .s file to change the 'progbits' type to 'note', for the section | |
| 51 | * directive that defines the .note.ABI-tag section. | |
| 52 | * - Compile the .s file to an object file. | |
| 53 | * | |
| 54 | * These steps are done in the individual Makefiles for each applicable arch. | |
| 984263bc MD |
55 | */ |
| 56 | static const struct { | |
| 57 | int32_t namesz; | |
| 58 | int32_t descsz; | |
| 59 | int32_t type; | |
| 60 | char name[sizeof ABI_VENDOR]; | |
| 61 | int32_t desc; | |
| c5a70710 | 62 | } abitag __attribute__ ((section (ABI_SECTION))) __attribute__ ((used))= { |
| 984263bc MD |
63 | sizeof ABI_VENDOR, |
| 64 | sizeof(int32_t), | |
| 65 | ABI_NOTETYPE, | |
| 66 | ABI_VENDOR, | |
| e5a620e1 | 67 | __DragonFly_version |
| 984263bc | 68 | }; |