1
2013-06-12 Nigel Croxon <nigel.croxon@hp.com>
4
GCC 4.8.0 adds some optimizations that will use movups/movaps (and use
5
%xmm* registers) when they're faster, and of course that won't work at
6
all since UEFI firmwares aren't guaranteed to initialize the mmx/sse
9
This will be even more annoying, since most UEFI firmwares don't
10
initialize the #DE or #UD trap handlers, and your backtrace will be a
11
random path through uninitialized memory, occasionally including
12
whatever address the IDT has for #UD, but also addresses like "0x4" and
13
"0x507" that you don't normally expect to see in your call path.
15
Signed-off-by: Peter Jones <pjones@redhat.com>
17
Author: Nigel Croxon <nigel.croxon@hp.com>
18
Date: Wed Jun 12 10:29:40 2013 -0400
20
bug in make 3.82 expand to odd values
22
Some Makefiles tickle a bug in make 3.82 that cause libefi.a
23
and libgnuefi.a dependencies to expand to the odd values:
25
libefi.a: boxdraw.o) smbios.o) ...
26
libgnuefi.a(reloc_x86_64.o:
28
The patch replaces libgnuefi.a($(OBJS)) & libefi.a($(OBJS))
29
with an equivalent expansion that should work with any make
30
that supports $(patsubst).
32
Author: Nigel Croxon <nigel.croxon@hp.com>
33
Date: Wed Jun 12 09:53:01 2013 -0400
35
support .text.* sections on x86_64
37
Group them in .text. Also add vague linkage sections in .text.
39
Signed-off-by: David Decotigny <decot@googlers.com>
41
Author: Nigel Croxon <nigel.croxon@hp.com>
42
Date: Wed Jun 12 09:51:36 2013 -0400
44
cleanup and fix Make.defaults
46
Reorder variables in Make.defaults so that they are grouped by
47
functions. Also fixed ifeq (x,y) to have required syntax and make it
48
work for ARCH amd64->x86_64 renaming on BSD. Also provides top-level
49
Makefile with a "mkvars" target that displays effective variables.
51
Signed-off-by: David Decotigny <decot@googlers.com>
53
Author: Nigel Croxon <nigel.croxon@hp.com>
54
Date: Wed Jun 12 09:47:16 2013 -0400
56
automatically determine number of uefi_call_wrapper() args on x86_64
58
Instead of asking developers to explicitly pass the number of
59
parameters to the functions that get called, we determine them
60
automatically at preprocessing time. This should result in more
63
Argument va_num is now ignored in x86_64 code, both with and
64
without HAVE_USE_MS_ABI.
66
Credits to the macro magic given in the comments.
68
Signed-off-by: David Decotigny <decot@googlers.com>
70
Author: Nigel Croxon <nigel.croxon@hp.com>
71
Date: Wed Jun 12 09:38:10 2013 -0400
73
fix parameter-passing corruption on x86_64 for >= 5 args
75
On x86_64 without HAVE_USE_MS_ABI support, uefi_call_wrapper() is a
76
variadic function. Parameters >=5 are copied to the stack and, when
77
passed small immediate values (and possibly other parameters), gcc
78
would emit a movl instruction before calling uefi_call_wrapper(). As a
79
result, only the lower 32b of these stack values are significant, the
80
upper 32b potentially contain garbage. Considering that
81
uefi_call_wrapper() assumes these arguments are clean 64b values
82
before calling the efi_callX() trampolines, the latter may be passed
83
garbage. This makes calling functions like
84
EFI_PCI_IO_PROTOCOL.Mem.Read()/Write() or BS->OpenProtocol() quite
87
This patch fixes this by turning uefi_call_wrapper() into a macro that
88
allows to expose the efi_callX() trampoline signatures to the callers,
89
so that gcc can know upfront that it has to pass all arguments to
90
efi_callX() as clean 64b values (eg. movq for immediates). The
91
_cast64_efi_callX macros are just here to avoid a gcc warning, they do
94
Signed-off-by: David Decotigny <decot@googlers.com>
96
Author: noxorc <nigel.croxon@hp.com>
97
Date: Wed May 15 15:26:16 2013 -0400
99
- Removes the ElfW() macro usage from reloc_ia32.c and reloc_x86_64.c. These
100
macros only exist in link.h on Linux. On FreeBSD, the equivalent macro is
101
__ElfN(). But the macro usage is redundant. You're only going to compile the
102
ia32 file for IA32 binaries and the x86_64 file for X64 binaries. If you had
103
just one file built for both cases, then using the macro might make more
106
- Removes the "#define foo_t efi_foo_t" macros from reloc_ia32.c and
109
- Modifies inc/x86_64/efibind.h and inc/ia32/efibind.h to use the new
110
definitions for uint64_t, int64_t and int8_t. The 64-bit types are now defined
113
typedef int __attribute__((__mode__(__DI__))) int64_t;
114
typedef unsigned int __attribute__((__mode__(__DI__))) uint64_t;
116
This removes the conflict between the host types dragged in by elf.h and the
117
type definitions in efibind.h that made the #define foo_t efi_foo_t" hack
118
necessary. Also, int8_t is now defined as signed char instead of just char
119
(assuming char == signed char is apparently not good enough).
121
- Also modifies these files to use stdint.h instead of stdint-gcc.h. It's
122
unclear if this is completely correct, but stdint-gcc.h is not present with
123
all GCC installs, and if you use -std=c99 or later you will force this case to
124
be hit. This also can break clang, which doesn't have a stdint-gcc.h at all.
126
- Removes the #include of <link.h> from reloc_ia32.c and reloc_x86_64.c (since
127
with the previous changes it's not needed anymore).
129
- Places the #include of <elf.h> after #include <efi>/#include <efilib.h> so
130
that we know the types will always be defined properly, in case you build on a
131
system where <elf.h> doesn't automatically pull in the right header files to
132
define all the needed types. (This actually happens on VxWorks. It's harmless
133
elsewhere. If you don't care about VxWorks, you can leave this out.)
135
- Modifies setjmp_ia32.S and setjmp_x86_64.S so to change "function" to
136
@function. The clang compiler doesn't like the former. Clang and GCC both like
139
- Modifles Make.defaults so that if ARCH is detected as "amd64," it's changed
140
to "x86_64." It happens that uname -m on 64-bit FreeBSD reports the former
141
rather than the latter, which breaks the build. This may also be the case on
142
some other OSes. There's a way to force uname(1) to return x86_64 as the
143
machine type, but this way is a little friendlier.
145
- Creates gnuefi/elf_ia32_fbsd_efi.lds which specifies the object file type as
146
elf-ia32-freebsd. This is required for building on FreeBSD/i386, not just
149
- Modifies apps/Makefile to always use
150
$(TOPDIR)/gnuefi/elf_$(ARCH)_fbsd_efi.lds when building on either 32-bit or
151
64-bit FreeBSD instead of just for the x86_64 case.
153
- Changed LDFLAGS in Make.defaults to include --no-undefined. This will cause
154
linking to fail if there are any unsatisfied symbols when creating foo.so
155
during any of the app builds, as opposed to just silently succeeding and
156
producing an unusable binary.
158
- Changed CFLAGS to include -ffreestanding -fno-stack-protector -fno-stack-
159
check. This prevents clang from inserting a call to memset() when compiling
160
the RtZeroMem() and RtSetMem() routines in lib/runtime/efirtlib.c and guards
161
against the native compiler in some Linux distros from adding in stack
162
checking code which relies on libc help that isn't present in the EFI runtime
165
This does the following:
167
- Cleans up the ia32 and x86-64 relocation code a bit (tries to break the
168
dependency between the host ELF headers and the EFI runtime environment)
169
- Avoids the dependency on stdint-gcc.h which may not always be available
170
- Allows GNU EFI to build out of the box on both FreeBSD/i386 and
172
- Allows GNU EFI to build out of the box with either GCC or clang on
173
FreeBSD/i386 and FreeBSD/amd64 9.0 and later.
174
- Makes things a little easier to port to VxWorks
175
- Avoids creating un-runable binaries with unresolved symbol definitions
176
(which can be very confusing to debug)
178
Author: noxorc <nigel.croxon@hp.com>
179
Date: Wed May 8 16:29:45 2013 -0400
181
Add the definitions for TCP, UDP and IP, for both IPv4 and IPv6.
184
2013-05-02 Nigel Croxon <nigel.croxon@hp.com>
185
* Chnage from Matt Fleming <matt.fleming@intel.com>
186
- Preparation for adding the networking protocol definitions.
187
Add the service binding protocol.
189
2013-02-21 Nigel Croxon <nigel.croxon@hp.com>
190
* Change from Peter Jones <pjones@redhat.com>
191
- Previously we were incorrectly passing 3 functions with
192
the System V ABI to UEFI functions as EFI ABI functions.
193
Mark them as EFIAPI so the compiler will (in our new
194
GNU_EFI_USE_MS_ABI world) use the correct ABI.
195
- These need to be EFIAPI functions because in some cases
196
they call ST->ConOut->OutputString(), which is an EFIAPI
197
function. (Which means that previously in cases that
198
needed "cdecl", these didn't work right.)
199
- If the compiler version is new enough, and GNU_EFI_USE_MS_ABI
200
is defined, use the function attribute ms_abi on everything
201
defined with "EFIAPI". Such calls will no longer go through
202
efi_call*, and as such will be properly type-checked.
203
- Honor PREFIX and LIBDIR correctly when passed in during the build.
204
- Add machine type defines for i386, arm/thumb, ia64, ebc, x86_64.
205
- __STDC_VERSION__ never actually gets defined unless there's a
206
--std=... line. So we were accidentally defining lots of c99
207
types ourself. Since it's 2012, use --std=c11 where appropriate,
208
and if it's defined and we're using gcc, actually include gcc's
210
- New test application added: route80h. This is a test program
211
for PciIo. It routes ioport 80h on ICH10 to PCI. This is also
212
useful on a very limited set of hardware to enable use of
213
a port 80h debug card.
214
- New test applcation added: modelist. This lists video modes
215
the GOP driver is showing us.
216
* Change from Finnbarr Murphy
217
- https://sourceforge.net/p/gnu-efi/feature-requests/2/
218
Please add the following status codes to <efierr.h>
219
EFI_INCOMPATIBLE_VERSION 25
220
EFI_SECURITY_VIOLATION 26
224
EFI_INVALID_LANGUAGE 32
225
EFI_COMPROMISED_DATA 33
226
* Change from SourceForge.net Bug report
227
- https://sourceforge.net/p/gnu-efi/bugs/5/
228
BufferSize is a UINT64 *. The file shipped with GNU EFI is from
229
1998 whereas the latest one is from 2004. I suspect Intel changed
230
the API in order handle 64-bit systems.
231
* Change from Felipe Contreras <felipe.contreras@gmail.com>
232
- The current code seems to screw the stack at certain points.
233
Multiple people have complained that gummiboot hangs right away,
234
which is in part the fault of gummiboot, but happens only
235
because the stack gets screwed. x86_64 EFI already aligns the
236
stack, so there's no need for so much code to find a proper
237
alignment, we always need to shift by 8 anyway.
238
* Change from A. Steinmetz
239
- https://sourceforge.net/p/gnu-efi/patches/1/
240
The patch prepares for elilo to support uefi pxe over ipv6
241
See uefi spec 2.3.1 errata c page 963 as reference.
242
Verfied on an ASUS Sabertooth X79 BIOS Rev. 2104 system which
243
is able to do an IPv6 UEFI PXE boot.
246
2012-09-21 Nigel Croxon <nigel.croxon@hp.com>
247
* Change from Peter Jones <pjones@redhat.com>
248
- EFI Block I/O protocol versions 2 and 3 provide more information
249
regarding physical disk layout, including alingment offset at the
250
beginning of the disk ("LowestAlignedLba"), logical block size
251
("LogicalBlocksPerPhysicalBlock"), and optimal block transfer size
252
("OptimalTransferLengthGranularity").
255
2012-04-30 Nigel Croxon <nigel.croxon@hp.com>
256
* Change from Matt Fleming <matt.fleming@intel.com>
257
- The .reloc section is now 4096-byte boundary for x86_64.
258
Without this patch the .reloc section will not adhere to
259
the alignment value in the FileAlignment field (512 bytes by
260
default) of the PE/COFF header. This results in a signed
261
executable failing to boot in a secure boot environment.
264
2011-12-12 Nigel Croxon <nigel.croxon@hp.com>
265
* Changes from Fenghua Yu <fenghua.yu@intel.com>
266
- This fixes redefined types compilation failure for tcc.c on x86_64 machines.
269
2011-11-15 Nigel Croxon <nigel.croxon@hp.com>
270
* Changes from Darren Hart <dvhart@linux.intel.com>
271
- Conditionally assign toolchain binaries to allow overriding them.
272
- Force a dependency on lib for gnuefi.
275
2011-08-23 Nigel Croxon <nigel.croxon@hp.com>
276
* Changes from Peter Jones <pjones@redhat.com>
277
- Add guarantee 16-byte stack alignment on x86_64.
278
- Add routine to make callbacks work.
279
- Add apps/tcc.efi to test calling convention.
282
2011-07-22 Nigel Croxon <nigel.croxon@hp.com>
283
* Changed Makefiles from GPL to BSD.
284
* Changes from Peter Jones <pjones@redhat.com>
285
- Add ifdefs for ia64 to mirror ia32 and x86-64 so that
286
one can build with GCC.
287
- Add headers for PciIo.
288
- Add the UEFI 2.x bits for EFI_BOOT_SERVICES
289
- Add an ignore for .note.GNU-stack section in X86-64 linker maps.
292
2011-04-07 Nigel Croxon <nigel.croxon@hp.com>
293
* Change license from GPL to BSD.
1
296
2009-09-12 Julien BLACHE <jb@jblache.org>
2
297
* Add support for FreeBSD.