Include github patch to make hex header files more usable
Signed-off-by: Al Stone <ahs3@redhat.com>
This commit is contained in:
parent
28da4ec9aa
commit
b61377318b
@ -39,6 +39,7 @@ Patch12: mips-be-fix.patch
|
||||
Patch13: cve-2017-13693.patch
|
||||
Patch14: cve-2017-13694.patch
|
||||
Patch15: cve-2017-13695.patch
|
||||
Patch16: add-th-option.patch
|
||||
|
||||
BuildRequires: bison patchutils flex
|
||||
|
||||
@ -104,6 +105,7 @@ gzip -dc %{SOURCE1} | tar -x --strip-components=1 -f -
|
||||
%patch13 -p1 -b .cve-2017-13693
|
||||
%patch14 -p1 -b .cve-2017-13694
|
||||
%patch15 -p1 -b .cve-2017-13695
|
||||
%patch16 -p1 -b .add-th-option
|
||||
|
||||
cp -p %{SOURCE2} README.Fedora
|
||||
cp -p %{SOURCE3} iasl.1
|
||||
@ -206,7 +208,10 @@ fi
|
||||
github patch to fix the leaks. Resolves BZ#1485348.
|
||||
- CVE-2017-13695: operand cache leak in nseval.c -- applied github patch to fix
|
||||
the leak. Resolves BZ#1485349.
|
||||
- Security fixes for the CVEs above applied. Closes BZ#1485355.
|
||||
- Security fixes for the CVEs above applied. Closes BZ#1485355. NOTE: these
|
||||
patches fix acpica-tools ONLY; the kernel needs to be patch separately.
|
||||
- Add in option -th that allows one to better name generated hex files, and
|
||||
clean up the header files generated (applied github patch)
|
||||
|
||||
* Fri Feb 09 2018 Igor Gnatenko <ignatenkobrain@fedoraproject.org> - 20180105-3
|
||||
- Escape macros in %%changelog
|
||||
|
353
add-th-option.patch
Normal file
353
add-th-option.patch
Normal file
@ -0,0 +1,353 @@
|
||||
From f0d66bb3979a2bcba84027cb2d09f5de76fec9a4 Mon Sep 17 00:00:00 2001
|
||||
From: Sami Mujawar <sami.mujawar@arm.com>
|
||||
Date: Fri, 21 Apr 2017 17:07:03 +0100
|
||||
Subject: [PATCH] Add support for hex AML C header file generation
|
||||
|
||||
The iAsl compiler provides a list of options to support
|
||||
'Firmware Support - C Text Output'.
|
||||
|
||||
One of the options, '-tc' supports generation of AML hex
|
||||
tables in C. This command generates a character array that
|
||||
represents the AML hex table data.
|
||||
e.g. unsigned char AmlCode[] = {
|
||||
// HEX AML data
|
||||
...
|
||||
};
|
||||
|
||||
However, there is no option to change the name of the
|
||||
generated character array (AmlCode) in the output hex file.
|
||||
This limits the ability to reference more than one table from
|
||||
the firmware code.
|
||||
|
||||
Also, the generated output does not have header file include
|
||||
guards. This is ideally desired if the hex file is to be
|
||||
included from a C source file.
|
||||
|
||||
A solution to this is to modify the Hex C output such that
|
||||
the name of the array is derived from the input file name,
|
||||
and to add header file include guards.
|
||||
|
||||
To address the above, without breaking existing implementations,
|
||||
a new option '-th' is introduced in the list of supported
|
||||
'Firmware Support - C Text Output' commands. This option
|
||||
generates an AML hex table output in a C header file suitable
|
||||
for including from a C source file.
|
||||
|
||||
The '-th' option:
|
||||
1. Uses the input file name as a prefix for the generated
|
||||
C array name.
|
||||
e.g. 'unsigned char DadtAmlCode[]'
|
||||
|
||||
2. Adds a header file include guard.
|
||||
e.g.
|
||||
#ifndef DSDT_HEX_
|
||||
#define DSDT_HEX_
|
||||
...
|
||||
|
||||
unsigned char DadtAmlCode[] = {
|
||||
// HEX AML data
|
||||
...
|
||||
};
|
||||
|
||||
#endif // DSDT_HEX_
|
||||
|
||||
Where Dadt.aml is the input file name.
|
||||
|
||||
Note: The header file include guard uses '<InputFileName>_HEX_'
|
||||
format instead of '<InputFileName>_H_' to avoid possible
|
||||
collision with an existing header guard.
|
||||
|
||||
Signed-off-by: Sami Mujawar <sami.mujawar@arm.com>
|
||||
Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>
|
||||
|
||||
Github-Location: https://github.com/acpica/acpica/pull/368/commits/f0d66bb3979a2bcba84027cb2d09f5de76fec9a4
|
||||
|
||||
---
|
||||
source/compiler/aslcompile.c | 12 +++-
|
||||
source/compiler/aslglobal.h | 1 +
|
||||
source/compiler/aslhelp.c | 1 +
|
||||
source/compiler/aslhex.c | 154 +++++++++++++++++++++++++++++++++++++++++++
|
||||
source/compiler/asloptions.c | 5 ++
|
||||
source/include/acapps.h | 6 ++
|
||||
6 files changed, 176 insertions(+), 3 deletions(-)
|
||||
|
||||
Index: acpica-unix2-20180209/source/compiler/aslcompile.c
|
||||
===================================================================
|
||||
--- acpica-unix2-20180209.orig/source/compiler/aslcompile.c
|
||||
+++ acpica-unix2-20180209/source/compiler/aslcompile.c
|
||||
@@ -436,7 +436,8 @@ AslCompilerSignon (
|
||||
Prefix = "; ";
|
||||
}
|
||||
else if ((Gbl_HexOutputFlag == HEX_OUTPUT_C) ||
|
||||
- (Gbl_HexOutputFlag == HEX_OUTPUT_ASL))
|
||||
+ (Gbl_HexOutputFlag == HEX_OUTPUT_ASL) ||
|
||||
+ (Gbl_HexOutputFlag == HEX_OUTPUT_H))
|
||||
{
|
||||
FlPrintFile (ASL_FILE_HEX_OUTPUT, "/*\n");
|
||||
Prefix = " * ";
|
||||
@@ -471,7 +472,11 @@ AslCompilerSignon (
|
||||
/* Compiler signon with copyright */
|
||||
|
||||
FlPrintFile (FileId, "%s\n", Prefix);
|
||||
- FlPrintFile (FileId, ACPI_COMMON_HEADER (UtilityName, Prefix));
|
||||
+ if (Gbl_HexOutputFlag == HEX_OUTPUT_H) {
|
||||
+ FlPrintFile (FileId, ACPI_COMMON_HEADER_NO_COPYRIGHT (UtilityName, Prefix));
|
||||
+ } else {
|
||||
+ FlPrintFile (FileId, ACPI_COMMON_HEADER (UtilityName, Prefix));
|
||||
+ }
|
||||
}
|
||||
|
||||
|
||||
@@ -513,7 +518,8 @@ AslCompilerFileHeader (
|
||||
Prefix = "; ";
|
||||
}
|
||||
else if ((Gbl_HexOutputFlag == HEX_OUTPUT_C) ||
|
||||
- (Gbl_HexOutputFlag == HEX_OUTPUT_ASL))
|
||||
+ (Gbl_HexOutputFlag == HEX_OUTPUT_ASL) ||
|
||||
+ (Gbl_HexOutputFlag == HEX_OUTPUT_H))
|
||||
{
|
||||
Prefix = " * ";
|
||||
}
|
||||
Index: acpica-unix2-20180209/source/compiler/aslglobal.h
|
||||
===================================================================
|
||||
--- acpica-unix2-20180209.orig/source/compiler/aslglobal.h
|
||||
+++ acpica-unix2-20180209/source/compiler/aslglobal.h
|
||||
@@ -220,6 +220,7 @@ ASL_EXTERN BOOLEAN ASL_
|
||||
#define HEX_OUTPUT_C 1
|
||||
#define HEX_OUTPUT_ASM 2
|
||||
#define HEX_OUTPUT_ASL 3
|
||||
+#define HEX_OUTPUT_H 4
|
||||
|
||||
ASL_EXTERN BOOLEAN ASL_INIT_GLOBAL (Gbl_HexOutputFlag, HEX_OUTPUT_NONE);
|
||||
|
||||
Index: acpica-unix2-20180209/source/compiler/aslhelp.c
|
||||
===================================================================
|
||||
--- acpica-unix2-20180209.orig/source/compiler/aslhelp.c
|
||||
+++ acpica-unix2-20180209/source/compiler/aslhelp.c
|
||||
@@ -121,6 +121,7 @@ Usage (
|
||||
|
||||
printf ("\nFirmware Support - C Text Output:\n");
|
||||
ACPI_OPTION ("-tc", "Create hex AML table in C (*.hex)");
|
||||
+ ACPI_OPTION ("-th", "Create hex AML table in C header (*.hex)");
|
||||
ACPI_OPTION ("-sc", "Create named hex AML arrays in C (*.c)");
|
||||
ACPI_OPTION ("-ic", "Create include file in C for -sc symbols (*.h)");
|
||||
ACPI_OPTION ("-so", "Create namespace AML offset table in C (*.offset.h)");
|
||||
Index: acpica-unix2-20180209/source/compiler/aslhex.c
|
||||
===================================================================
|
||||
--- acpica-unix2-20180209.orig/source/compiler/aslhex.c
|
||||
+++ acpica-unix2-20180209/source/compiler/aslhex.c
|
||||
@@ -46,6 +46,10 @@
|
||||
#define _COMPONENT ACPI_COMPILER
|
||||
ACPI_MODULE_NAME ("ashex")
|
||||
|
||||
+#ifndef PATH_MAX
|
||||
+#define PATH_MAX 256
|
||||
+#endif
|
||||
+
|
||||
/*
|
||||
* This module emits ASCII hex output files in either C, ASM, or ASL format
|
||||
*/
|
||||
@@ -64,6 +68,10 @@ static void
|
||||
HxDoHexOutputAsm (
|
||||
void);
|
||||
|
||||
+static void
|
||||
+HxDoHexOutputH (
|
||||
+ void);
|
||||
+
|
||||
static UINT32
|
||||
HxReadAmlOutputFile (
|
||||
UINT8 *Buffer);
|
||||
@@ -104,6 +112,11 @@ HxDoHexOutput (
|
||||
HxDoHexOutputAsl ();
|
||||
break;
|
||||
|
||||
+ case HEX_OUTPUT_H:
|
||||
+
|
||||
+ HxDoHexOutputH ();
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
|
||||
/* No other output types supported */
|
||||
@@ -233,6 +246,147 @@ HxDoHexOutputC (
|
||||
}
|
||||
|
||||
|
||||
+/*******************************************************************************
|
||||
+*
|
||||
+* FUNCTION: HxDoHexOutputH
|
||||
+*
|
||||
+* PARAMETERS: None
|
||||
+*
|
||||
+* RETURN: None
|
||||
+*
|
||||
+* DESCRIPTION: Create the hex output file. This is the same data as the AML
|
||||
+* output file, but formatted into hex/ASCII bytes suitable for
|
||||
+* inclusion into a C source file.
|
||||
+*
|
||||
+******************************************************************************/
|
||||
+
|
||||
+static void
|
||||
+HxDoHexOutputH (
|
||||
+ void)
|
||||
+{
|
||||
+ UINT8 FileData[HEX_TABLE_LINE_SIZE];
|
||||
+ UINT32 LineLength;
|
||||
+ UINT32 Offset = 0;
|
||||
+ UINT32 AmlFileSize;
|
||||
+ UINT32 i;
|
||||
+ UINT32 FileNamePrefixLength;
|
||||
+ char *DotPosition;
|
||||
+ char *InputFileName;
|
||||
+ char *NamePosition;
|
||||
+ char *FileNameEndPosition;
|
||||
+ char FileNamePrefix[PATH_MAX];
|
||||
+ char FileGuard[PATH_MAX];
|
||||
+
|
||||
+ /* Get AML size, seek back to start */
|
||||
+
|
||||
+ AmlFileSize = FlGetFileSize (ASL_FILE_AML_OUTPUT);
|
||||
+ FlSeekFile (ASL_FILE_AML_OUTPUT, 0);
|
||||
+
|
||||
+ /*
|
||||
+ * Find the filename and use it as a prefix for
|
||||
+ * the AML code array and the header file guard
|
||||
+ */
|
||||
+ InputFileName = Gbl_Files[ASL_FILE_INPUT].Filename;
|
||||
+ FileNameEndPosition = InputFileName + strlen (InputFileName);
|
||||
+
|
||||
+ NamePosition = strrchr (InputFileName, '/');
|
||||
+ if (NamePosition == NULL) {
|
||||
+ /* '/' not found. This means the input file name
|
||||
+ * does not contain the path and is in the current
|
||||
+ * directory.
|
||||
+ */
|
||||
+ NamePosition = InputFileName;
|
||||
+ } else {
|
||||
+ /* '/' was found. So move to the next character
|
||||
+ * which is the name of the input file.
|
||||
+ */
|
||||
+ NamePosition++;
|
||||
+ }
|
||||
+
|
||||
+ /* Get the file name without the extension to use
|
||||
+ * as a prefix.
|
||||
+ */
|
||||
+ DotPosition = strrchr (NamePosition, '.');
|
||||
+ if (DotPosition) {
|
||||
+ /* No dot or suffix */
|
||||
+ FileNameEndPosition = DotPosition;
|
||||
+ }
|
||||
+
|
||||
+ FileNamePrefixLength = FileNameEndPosition - NamePosition;
|
||||
+ if (FileNamePrefixLength > (PATH_MAX - 1)) {
|
||||
+ AslError (ASL_ERROR, ASL_MSG_STRING_LENGTH, NULL, ": Input file name too long.");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ strncpy (FileNamePrefix, NamePosition, FileNamePrefixLength);
|
||||
+ /* NULL terminate the string */
|
||||
+ FileNamePrefix[FileNamePrefixLength] = '\0';
|
||||
+
|
||||
+ if (strrchr (FileNamePrefix, ' ')) {
|
||||
+ AslError (ASL_ERROR, ASL_MSG_SYNTAX, NULL, "Input file name has space.");
|
||||
+ return;
|
||||
+ }
|
||||
+
|
||||
+ strcpy (FileGuard, FileNamePrefix);
|
||||
+ AcpiUtStrupr (FileGuard);
|
||||
+
|
||||
+ /* Generate the hex output. */
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, " * C header code output\n");
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, " * AML code block contains 0x%X bytes\n *\n */\n",
|
||||
+ AmlFileSize);
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "\n");
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "#ifndef %s_HEX_\n", FileGuard);
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "#define %s_HEX_\n", FileGuard);
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "\n");
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "unsigned char %sAmlCode[] =\n{\n", FileNamePrefix);
|
||||
+
|
||||
+ while (Offset < AmlFileSize) {
|
||||
+ /* Read enough bytes needed for one output line */
|
||||
+
|
||||
+ LineLength = HxReadAmlOutputFile (FileData);
|
||||
+ if (!LineLength) {
|
||||
+ break;
|
||||
+ }
|
||||
+
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, " ");
|
||||
+
|
||||
+ for (i = 0; i < LineLength; i++) {
|
||||
+ /*
|
||||
+ * Print each hex byte.
|
||||
+ * Add a comma until the very last byte of the AML file
|
||||
+ * (Some C compilers complain about a trailing comma)
|
||||
+ */
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "0x%2.2X", FileData[i]);
|
||||
+ if ((Offset + i + 1) < AmlFileSize) {
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, ",");
|
||||
+ } else {
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, " ");
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ /* Add fill spaces if needed for last line */
|
||||
+
|
||||
+ if (LineLength < HEX_TABLE_LINE_SIZE) {
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "%*s",
|
||||
+ 5 * (HEX_TABLE_LINE_SIZE - LineLength), " ");
|
||||
+ }
|
||||
+
|
||||
+ /* Emit the offset and ASCII dump for the entire line */
|
||||
+
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, " /* %8.8X", Offset);
|
||||
+ LsDumpAsciiInComment (ASL_FILE_HEX_OUTPUT, LineLength, FileData);
|
||||
+
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "%*s*/\n",
|
||||
+ HEX_TABLE_LINE_SIZE - LineLength + 1, " ");
|
||||
+
|
||||
+ Offset += LineLength;
|
||||
+ }
|
||||
+
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "};\n");
|
||||
+ FlPrintFile (ASL_FILE_HEX_OUTPUT, "\n#endif // %s_HEX_\n", FileGuard);
|
||||
+}
|
||||
+
|
||||
+
|
||||
/*******************************************************************************
|
||||
*
|
||||
* FUNCTION: HxDoHexOutputAsl
|
||||
Index: acpica-unix2-20180209/source/compiler/asloptions.c
|
||||
===================================================================
|
||||
--- acpica-unix2-20180209.orig/source/compiler/asloptions.c
|
||||
+++ acpica-unix2-20180209/source/compiler/asloptions.c
|
||||
@@ -734,6 +734,11 @@ AslDoOptions (
|
||||
Gbl_HexOutputFlag = HEX_OUTPUT_ASL;
|
||||
break;
|
||||
|
||||
+ case 'h':
|
||||
+
|
||||
+ Gbl_HexOutputFlag = HEX_OUTPUT_H;
|
||||
+ break;
|
||||
+
|
||||
default:
|
||||
|
||||
printf ("Unknown option: -t%s\n", AcpiGbl_Optarg);
|
||||
Index: acpica-unix2-20180209/source/include/acapps.h
|
||||
===================================================================
|
||||
--- acpica-unix2-20180209.orig/source/include/acapps.h
|
||||
+++ acpica-unix2-20180209/source/include/acapps.h
|
||||
@@ -80,6 +80,12 @@
|
||||
Prefix, ACPICA_COPYRIGHT, \
|
||||
Prefix
|
||||
|
||||
+#define ACPI_COMMON_HEADER_NO_COPYRIGHT(UtilityName, Prefix) \
|
||||
+ "%s%s\n%s%s version %8.8X%s\n%s\n", \
|
||||
+ Prefix, ACPICA_NAME, \
|
||||
+ Prefix, UtilityName, ((UINT32) ACPI_CA_VERSION), ACPI_WIDTH, \
|
||||
+ Prefix
|
||||
+
|
||||
#define ACPI_COMMON_BUILD_TIME \
|
||||
"Build date/time: %s %s\n", __DATE__, __TIME__
|
||||
|
Loading…
Reference in New Issue
Block a user