Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/contrib/dev/acpica/compiler/asllistsup.c
48373 views
1
/******************************************************************************
2
*
3
* Module Name: asllistsup - Listing file support utilities
4
*
5
*****************************************************************************/
6
7
/******************************************************************************
8
*
9
* 1. Copyright Notice
10
*
11
* Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
12
* All rights reserved.
13
*
14
* 2. License
15
*
16
* 2.1. This is your license from Intel Corp. under its intellectual property
17
* rights. You may have additional license terms from the party that provided
18
* you this software, covering your right to use that party's intellectual
19
* property rights.
20
*
21
* 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
22
* copy of the source code appearing in this file ("Covered Code") an
23
* irrevocable, perpetual, worldwide license under Intel's copyrights in the
24
* base code distributed originally by Intel ("Original Intel Code") to copy,
25
* make derivatives, distribute, use and display any portion of the Covered
26
* Code in any form, with the right to sublicense such rights; and
27
*
28
* 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
29
* license (with the right to sublicense), under only those claims of Intel
30
* patents that are infringed by the Original Intel Code, to make, use, sell,
31
* offer to sell, and import the Covered Code and derivative works thereof
32
* solely to the minimum extent necessary to exercise the above copyright
33
* license, and in no event shall the patent license extend to any additions
34
* to or modifications of the Original Intel Code. No other license or right
35
* is granted directly or by implication, estoppel or otherwise;
36
*
37
* The above copyright and patent license is granted only if the following
38
* conditions are met:
39
*
40
* 3. Conditions
41
*
42
* 3.1. Redistribution of Source with Rights to Further Distribute Source.
43
* Redistribution of source code of any substantial portion of the Covered
44
* Code or modification with rights to further distribute source must include
45
* the above Copyright Notice, the above License, this list of Conditions,
46
* and the following Disclaimer and Export Compliance provision. In addition,
47
* Licensee must cause all Covered Code to which Licensee contributes to
48
* contain a file documenting the changes Licensee made to create that Covered
49
* Code and the date of any change. Licensee must include in that file the
50
* documentation of any changes made by any predecessor Licensee. Licensee
51
* must include a prominent statement that the modification is derived,
52
* directly or indirectly, from Original Intel Code.
53
*
54
* 3.2. Redistribution of Source with no Rights to Further Distribute Source.
55
* Redistribution of source code of any substantial portion of the Covered
56
* Code or modification without rights to further distribute source must
57
* include the following Disclaimer and Export Compliance provision in the
58
* documentation and/or other materials provided with distribution. In
59
* addition, Licensee may not authorize further sublicense of source of any
60
* portion of the Covered Code, and must include terms to the effect that the
61
* license from Licensee to its licensee is limited to the intellectual
62
* property embodied in the software Licensee provides to its licensee, and
63
* not to intellectual property embodied in modifications its licensee may
64
* make.
65
*
66
* 3.3. Redistribution of Executable. Redistribution in executable form of any
67
* substantial portion of the Covered Code or modification must reproduce the
68
* above Copyright Notice, and the following Disclaimer and Export Compliance
69
* provision in the documentation and/or other materials provided with the
70
* distribution.
71
*
72
* 3.4. Intel retains all right, title, and interest in and to the Original
73
* Intel Code.
74
*
75
* 3.5. Neither the name Intel nor any other trademark owned or controlled by
76
* Intel shall be used in advertising or otherwise to promote the sale, use or
77
* other dealings in products derived from or relating to the Covered Code
78
* without prior written authorization from Intel.
79
*
80
* 4. Disclaimer and Export Compliance
81
*
82
* 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
83
* HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
84
* IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
85
* INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
86
* UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
87
* IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
88
* PARTICULAR PURPOSE.
89
*
90
* 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
91
* OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
92
* COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
93
* SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
94
* CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
95
* HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
96
* SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
97
* LIMITED REMEDY.
98
*
99
* 4.3. Licensee shall not export, either directly or indirectly, any of this
100
* software or system incorporating such software without first obtaining any
101
* required license or other approval from the U. S. Department of Commerce or
102
* any other agency or department of the United States Government. In the
103
* event Licensee exports any such software from the United States or
104
* re-exports any such software from a foreign destination, Licensee shall
105
* ensure that the distribution and export/re-export of the software is in
106
* compliance with all laws, regulations, orders, or other restrictions of the
107
* U.S. Export Administration Regulations. Licensee agrees that neither it nor
108
* any of its subsidiaries will export/re-export any technical data, process,
109
* software, or service, directly or indirectly, to any country for which the
110
* United States government or any agency thereof requires an export license,
111
* other governmental approval, or letter of assurance, without first obtaining
112
* such license, approval or letter.
113
*
114
*****************************************************************************
115
*
116
* Alternatively, you may choose to be licensed under the terms of the
117
* following license:
118
*
119
* Redistribution and use in source and binary forms, with or without
120
* modification, are permitted provided that the following conditions
121
* are met:
122
* 1. Redistributions of source code must retain the above copyright
123
* notice, this list of conditions, and the following disclaimer,
124
* without modification.
125
* 2. Redistributions in binary form must reproduce at minimum a disclaimer
126
* substantially similar to the "NO WARRANTY" disclaimer below
127
* ("Disclaimer") and any redistribution must be conditioned upon
128
* including a substantially similar Disclaimer requirement for further
129
* binary redistribution.
130
* 3. Neither the names of the above-listed copyright holders nor the names
131
* of any contributors may be used to endorse or promote products derived
132
* from this software without specific prior written permission.
133
*
134
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
135
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
136
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
137
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
138
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
139
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
140
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
141
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
142
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
143
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
144
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
145
*
146
* Alternatively, you may choose to be licensed under the terms of the
147
* GNU General Public License ("GPL") version 2 as published by the Free
148
* Software Foundation.
149
*
150
*****************************************************************************/
151
152
#include <contrib/dev/acpica/compiler/aslcompiler.h>
153
#include "aslcompiler.y.h"
154
155
156
#define _COMPONENT ACPI_COMPILER
157
ACPI_MODULE_NAME ("aslistsup")
158
159
160
/*******************************************************************************
161
*
162
* FUNCTION: LsDumpAscii
163
*
164
* PARAMETERS: FileId - ID of current listing file
165
* Count - Number of bytes to convert
166
* Buffer - Buffer of bytes to convert
167
*
168
* RETURN: None
169
*
170
* DESCRIPTION: Convert hex bytes to ascii
171
*
172
******************************************************************************/
173
174
void
175
LsDumpAscii (
176
UINT32 FileId,
177
UINT32 Count,
178
UINT8 *Buffer)
179
{
180
UINT8 BufChar;
181
UINT32 i;
182
183
184
FlPrintFile (FileId, " \"");
185
for (i = 0; i < Count; i++)
186
{
187
BufChar = Buffer[i];
188
if (isprint (BufChar))
189
{
190
FlPrintFile (FileId, "%c", BufChar);
191
}
192
else
193
{
194
/* Not a printable character, just put out a dot */
195
196
FlPrintFile (FileId, ".");
197
}
198
}
199
200
FlPrintFile (FileId, "\"");
201
}
202
203
204
/*******************************************************************************
205
*
206
* FUNCTION: LsDumpAsciiInComment
207
*
208
* PARAMETERS: FileId - ID of current listing file
209
* Count - Number of bytes to convert
210
* Buffer - Buffer of bytes to convert
211
*
212
* RETURN: None
213
*
214
* DESCRIPTION: Convert hex bytes to ascii
215
*
216
******************************************************************************/
217
218
void
219
LsDumpAsciiInComment (
220
UINT32 FileId,
221
UINT32 Count,
222
UINT8 *Buffer)
223
{
224
UINT8 BufChar = 0;
225
UINT8 LastChar;
226
UINT32 i;
227
228
229
FlPrintFile (FileId, " \"");
230
for (i = 0; i < Count; i++)
231
{
232
LastChar = BufChar;
233
BufChar = Buffer[i];
234
235
if (isprint (BufChar))
236
{
237
/* Handle embedded C comment sequences */
238
239
if (((LastChar == '*') && (BufChar == '/')) ||
240
((LastChar == '/') && (BufChar == '*')))
241
{
242
/* Insert a space to break the sequence */
243
244
FlPrintFile (FileId, " ");
245
}
246
247
FlPrintFile (FileId, "%c", BufChar);
248
}
249
else
250
{
251
/* Not a printable character, just put out a dot */
252
253
FlPrintFile (FileId, ".");
254
}
255
}
256
257
FlPrintFile (FileId, "\"");
258
}
259
260
261
/*******************************************************************************
262
*
263
* FUNCTION: LsCheckException
264
*
265
* PARAMETERS: LineNumber - Current logical (cumulative) line #
266
* FileId - ID of output listing file
267
*
268
* RETURN: None
269
*
270
* DESCRIPTION: Check if there is an exception for this line, and if there is,
271
* put it in the listing immediately. Handles multiple errors
272
* per line. AslGbl_NextError points to the next error in the
273
* sorted (by line #) list of compile errors/warnings.
274
*
275
******************************************************************************/
276
277
void
278
LsCheckException (
279
UINT32 LineNumber,
280
UINT32 FileId)
281
{
282
283
if ((!AslGbl_NextError) ||
284
(LineNumber < AslGbl_NextError->LogicalLineNumber ))
285
{
286
return;
287
}
288
289
/* Handle multiple errors per line */
290
291
if (FileId == ASL_FILE_LISTING_OUTPUT)
292
{
293
while (AslGbl_NextError &&
294
(LineNumber >= AslGbl_NextError->LogicalLineNumber))
295
{
296
AePrintException (FileId, AslGbl_NextError, "\n[****iasl****]\n");
297
AslGbl_NextError = AslGbl_NextError->Next;
298
}
299
300
FlPrintFile (FileId, "\n");
301
}
302
}
303
304
305
/*******************************************************************************
306
*
307
* FUNCTION: LsWriteListingHexBytes
308
*
309
* PARAMETERS: Buffer - AML code buffer
310
* Length - Number of AML bytes to write
311
* FileId - ID of current listing file.
312
*
313
* RETURN: None
314
*
315
* DESCRIPTION: Write the contents of the AML buffer to the listing file via
316
* the listing buffer. The listing buffer is flushed every 16
317
* AML bytes.
318
*
319
******************************************************************************/
320
321
void
322
LsWriteListingHexBytes (
323
UINT8 *Buffer,
324
UINT32 Length,
325
UINT32 FileId)
326
{
327
UINT32 i;
328
329
330
/* Transfer all requested bytes */
331
332
for (i = 0; i < Length; i++)
333
{
334
/* Print line header when buffer is empty */
335
336
if (AslGbl_CurrentHexColumn == 0)
337
{
338
if (AslGbl_HasIncludeFiles)
339
{
340
FlPrintFile (FileId, "%*s", 10, " ");
341
}
342
343
switch (FileId)
344
{
345
case ASL_FILE_LISTING_OUTPUT:
346
347
FlPrintFile (FileId, "%8.8X%s", AslGbl_CurrentAmlOffset,
348
ASL_LISTING_LINE_PREFIX);
349
break;
350
351
case ASL_FILE_ASM_SOURCE_OUTPUT:
352
353
FlPrintFile (FileId, " db ");
354
break;
355
356
case ASL_FILE_C_SOURCE_OUTPUT:
357
358
FlPrintFile (FileId, " ");
359
break;
360
361
default:
362
363
/* No other types supported */
364
365
return;
366
}
367
}
368
369
/* Transfer AML byte and update counts */
370
371
AslGbl_AmlBuffer[AslGbl_CurrentHexColumn] = Buffer[i];
372
373
AslGbl_CurrentHexColumn++;
374
AslGbl_CurrentAmlOffset++;
375
376
/* Flush buffer when it is full */
377
378
if (AslGbl_CurrentHexColumn >= HEX_LISTING_LINE_SIZE)
379
{
380
LsFlushListingBuffer (FileId);
381
}
382
}
383
}
384
385
386
/*******************************************************************************
387
*
388
* FUNCTION: LsWriteSourceLines
389
*
390
* PARAMETERS: ToLineNumber -
391
* ToLogicalLineNumber - Write up to this source line number
392
* FileId - ID of current listing file
393
*
394
* RETURN: None
395
*
396
* DESCRIPTION: Read then write source lines to the listing file until we have
397
* reached the specified logical (cumulative) line number. This
398
* automatically echos out comment blocks and other non-AML
399
* generating text until we get to the actual AML-generating line
400
* of ASL code specified by the logical line number.
401
*
402
******************************************************************************/
403
404
void
405
LsWriteSourceLines (
406
UINT32 ToLineNumber,
407
UINT32 ToLogicalLineNumber,
408
UINT32 FileId)
409
{
410
411
/* Nothing to do for these file types */
412
413
if ((FileId == ASL_FILE_ASM_INCLUDE_OUTPUT) ||
414
(FileId == ASL_FILE_C_INCLUDE_OUTPUT))
415
{
416
return;
417
}
418
419
AslGbl_CurrentLine = ToLogicalLineNumber;
420
421
/* Flush any hex bytes remaining from the last opcode */
422
423
LsFlushListingBuffer (FileId);
424
425
/* Read lines and write them as long as we are not caught up */
426
427
if (AslGbl_SourceLine < AslGbl_CurrentLine)
428
{
429
/*
430
* If we just completed writing some AML hex bytes, output a linefeed
431
* to add some whitespace for readability.
432
*/
433
if (AslGbl_HexBytesWereWritten)
434
{
435
FlPrintFile (FileId, "\n");
436
AslGbl_HexBytesWereWritten = FALSE;
437
}
438
439
if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
440
{
441
FlPrintFile (FileId, " /*\n");
442
}
443
444
/* Write one line at a time until we have reached the target line # */
445
446
while ((AslGbl_SourceLine < AslGbl_CurrentLine) &&
447
LsWriteOneSourceLine (FileId))
448
{ ; }
449
450
if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
451
{
452
FlPrintFile (FileId, " */");
453
}
454
455
FlPrintFile (FileId, "\n");
456
}
457
}
458
459
460
/*******************************************************************************
461
*
462
* FUNCTION: LsWriteOneSourceLine
463
*
464
* PARAMETERS: FileId - ID of current listing file
465
*
466
* RETURN: FALSE on EOF (input source file), TRUE otherwise
467
*
468
* DESCRIPTION: Read one line from the input source file and echo it to the
469
* listing file, prefixed with the line number, and if the source
470
* file contains include files, prefixed with the current filename
471
*
472
******************************************************************************/
473
474
UINT32
475
LsWriteOneSourceLine (
476
UINT32 FileId)
477
{
478
UINT8 FileByte;
479
UINT32 Column = 0;
480
UINT32 Index = 16;
481
BOOLEAN StartOfLine = FALSE;
482
BOOLEAN ProcessLongLine = FALSE;
483
484
485
AslGbl_SourceLine++;
486
AslGbl_ListingNode->LineNumber++;
487
488
/* Ignore lines that are completely blank (but count the line above) */
489
490
if (FlReadFile (ASL_FILE_SOURCE_OUTPUT, &FileByte, 1) != AE_OK)
491
{
492
return (0);
493
}
494
if (FileByte == '\n')
495
{
496
return (1);
497
}
498
499
/*
500
* This is a non-empty line, we will print the entire line with
501
* the line number and possibly other prefixes and transforms.
502
*/
503
504
/* Line prefixes for special files, C and ASM output */
505
506
if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
507
{
508
FlPrintFile (FileId, " *");
509
}
510
if (FileId == ASL_FILE_ASM_SOURCE_OUTPUT)
511
{
512
FlPrintFile (FileId, "; ");
513
}
514
515
if (AslGbl_HasIncludeFiles)
516
{
517
/*
518
* This file contains "include" statements, print the current
519
* filename and line number within the current file
520
*/
521
FlPrintFile (FileId, "%12s %5d%s",
522
AslGbl_ListingNode->Filename, AslGbl_ListingNode->LineNumber,
523
ASL_LISTING_LINE_PREFIX);
524
}
525
else
526
{
527
/* No include files, just print the line number */
528
529
FlPrintFile (FileId, "%8u%s", AslGbl_SourceLine,
530
ASL_LISTING_LINE_PREFIX);
531
}
532
533
/* Read the rest of this line (up to a newline or EOF) */
534
535
do
536
{
537
if (FileId == ASL_FILE_C_SOURCE_OUTPUT)
538
{
539
if (FileByte == '/')
540
{
541
FileByte = '*';
542
}
543
}
544
545
/* Split long input lines for readability in the listing */
546
547
Column++;
548
if (Column >= 128)
549
{
550
if (!ProcessLongLine)
551
{
552
if ((FileByte != '}') &&
553
(FileByte != '{'))
554
{
555
goto WriteByte;
556
}
557
558
ProcessLongLine = TRUE;
559
}
560
561
if (FileByte == '{')
562
{
563
FlPrintFile (FileId, "\n%*s{\n", Index, " ");
564
StartOfLine = TRUE;
565
Index += 4;
566
continue;
567
}
568
569
else if (FileByte == '}')
570
{
571
if (!StartOfLine)
572
{
573
FlPrintFile (FileId, "\n");
574
}
575
576
StartOfLine = TRUE;
577
Index -= 4;
578
FlPrintFile (FileId, "%*s}\n", Index, " ");
579
continue;
580
}
581
582
/* Ignore spaces/tabs at the start of line */
583
584
else if ((FileByte == ' ') && StartOfLine)
585
{
586
continue;
587
}
588
589
else if (StartOfLine)
590
{
591
StartOfLine = FALSE;
592
FlPrintFile (FileId, "%*s", Index, " ");
593
}
594
595
WriteByte:
596
FlWriteFile (FileId, &FileByte, 1);
597
if (FileByte == '\n')
598
{
599
/*
600
* This line has been completed.
601
* Check if an error occurred on this source line during the compile.
602
* If so, we print the error message after the source line.
603
*/
604
LsCheckException (AslGbl_SourceLine, FileId);
605
return (1);
606
}
607
}
608
else
609
{
610
FlWriteFile (FileId, &FileByte, 1);
611
if (FileByte == '\n')
612
{
613
/*
614
* This line has been completed.
615
* Check if an error occurred on this source line during the compile.
616
* If so, we print the error message after the source line.
617
*/
618
LsCheckException (AslGbl_SourceLine, FileId);
619
return (1);
620
}
621
}
622
623
} while (FlReadFile (ASL_FILE_SOURCE_OUTPUT, &FileByte, 1) == AE_OK);
624
625
/* EOF on the input file was reached */
626
627
return (0);
628
}
629
630
631
/*******************************************************************************
632
*
633
* FUNCTION: LsFlushListingBuffer
634
*
635
* PARAMETERS: FileId - ID of the listing file
636
*
637
* RETURN: None
638
*
639
* DESCRIPTION: Flush out the current contents of the 16-byte hex AML code
640
* buffer. Usually called at the termination of a single line
641
* of source code or when the buffer is full.
642
*
643
******************************************************************************/
644
645
void
646
LsFlushListingBuffer (
647
UINT32 FileId)
648
{
649
UINT32 i;
650
651
652
if (AslGbl_CurrentHexColumn == 0)
653
{
654
return;
655
}
656
657
/* Write the hex bytes */
658
659
switch (FileId)
660
{
661
case ASL_FILE_LISTING_OUTPUT:
662
663
for (i = 0; i < AslGbl_CurrentHexColumn; i++)
664
{
665
FlPrintFile (FileId, "%2.2X ", AslGbl_AmlBuffer[i]);
666
}
667
668
for (i = 0; i < ((HEX_LISTING_LINE_SIZE - AslGbl_CurrentHexColumn) * 3); i++)
669
{
670
FlWriteFile (FileId, ".", 1);
671
}
672
673
/* Write the ASCII character associated with each of the bytes */
674
675
LsDumpAscii (FileId, AslGbl_CurrentHexColumn, AslGbl_AmlBuffer);
676
break;
677
678
679
case ASL_FILE_ASM_SOURCE_OUTPUT:
680
681
for (i = 0; i < AslGbl_CurrentHexColumn; i++)
682
{
683
if (i > 0)
684
{
685
FlPrintFile (FileId, ",");
686
}
687
688
FlPrintFile (FileId, "0%2.2Xh", AslGbl_AmlBuffer[i]);
689
}
690
691
for (i = 0; i < ((HEX_LISTING_LINE_SIZE - AslGbl_CurrentHexColumn) * 5); i++)
692
{
693
FlWriteFile (FileId, " ", 1);
694
}
695
696
FlPrintFile (FileId, " ;%8.8X",
697
AslGbl_CurrentAmlOffset - HEX_LISTING_LINE_SIZE);
698
699
/* Write the ASCII character associated with each of the bytes */
700
701
LsDumpAscii (FileId, AslGbl_CurrentHexColumn, AslGbl_AmlBuffer);
702
break;
703
704
705
case ASL_FILE_C_SOURCE_OUTPUT:
706
707
for (i = 0; i < AslGbl_CurrentHexColumn; i++)
708
{
709
FlPrintFile (FileId, "0x%2.2X,", AslGbl_AmlBuffer[i]);
710
}
711
712
/* Pad hex output with spaces if line is shorter than max line size */
713
714
for (i = 0; i < ((HEX_LISTING_LINE_SIZE - AslGbl_CurrentHexColumn) * 5); i++)
715
{
716
FlWriteFile (FileId, " ", 1);
717
}
718
719
/* AML offset for the start of the line */
720
721
FlPrintFile (FileId, " /* %8.8X",
722
AslGbl_CurrentAmlOffset - AslGbl_CurrentHexColumn);
723
724
/* Write the ASCII character associated with each of the bytes */
725
726
LsDumpAsciiInComment (FileId, AslGbl_CurrentHexColumn, AslGbl_AmlBuffer);
727
FlPrintFile (FileId, " */");
728
break;
729
730
default:
731
732
/* No other types supported */
733
734
return;
735
}
736
737
FlPrintFile (FileId, "\n");
738
739
AslGbl_CurrentHexColumn = 0;
740
AslGbl_HexBytesWereWritten = TRUE;
741
}
742
743
744
/*******************************************************************************
745
*
746
* FUNCTION: LsPushNode
747
*
748
* PARAMETERS: Filename - Pointer to the include filename
749
*
750
* RETURN: None
751
*
752
* DESCRIPTION: Push a listing node on the listing/include file stack. This
753
* stack enables tracking of include files (infinitely nested)
754
* and resumption of the listing of the parent file when the
755
* include file is finished.
756
*
757
******************************************************************************/
758
759
void
760
LsPushNode (
761
char *Filename)
762
{
763
ASL_LISTING_NODE *Lnode;
764
765
766
/* Create a new node */
767
768
Lnode = UtLocalCalloc (sizeof (ASL_LISTING_NODE));
769
770
/* Initialize */
771
772
Lnode->Filename = Filename;
773
Lnode->LineNumber = 0;
774
775
/* Link (push) */
776
777
Lnode->Next = AslGbl_ListingNode;
778
AslGbl_ListingNode = Lnode;
779
}
780
781
782
/*******************************************************************************
783
*
784
* FUNCTION: LsPopNode
785
*
786
* PARAMETERS: None
787
*
788
* RETURN: List head after current head is popped off
789
*
790
* DESCRIPTION: Pop the current head of the list, free it, and return the
791
* next node on the stack (the new current node).
792
*
793
******************************************************************************/
794
795
ASL_LISTING_NODE *
796
LsPopNode (
797
void)
798
{
799
ASL_LISTING_NODE *Lnode;
800
801
802
/* Just grab the node at the head of the list */
803
804
Lnode = AslGbl_ListingNode;
805
if ((!Lnode) ||
806
(!Lnode->Next))
807
{
808
AslError (ASL_ERROR, ASL_MSG_COMPILER_INTERNAL, NULL,
809
"Could not pop empty listing stack");
810
return (AslGbl_ListingNode);
811
}
812
813
AslGbl_ListingNode = Lnode->Next;
814
ACPI_FREE (Lnode);
815
816
/* New "Current" node is the new head */
817
818
return (AslGbl_ListingNode);
819
}
820
821