aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/fixup-makefile.pl
blob: b6f1c74738002c5c834a59925c9e20af75bd4ed0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/env perl
use strict;

my $error;
my %state;

sub usage() {
die <<EOF;
Usage: $0 <file> <command> [<arguments>]

Commands:
add-hash <variable> <value>
fix-hash <variable> <value>
rename-var <variable> <name>

EOF
}

sub set_var($) {
	my $var = shift;

	$state{var} = $var;
	if ($var =~ /(.*):(.*)/) {
		$state{template} = $1;
		$state{var} = $2;
		$state{related_var} = "URL";
	} else {
		$state{context} = 1;
		$state{related_var} = "PKG_SOURCE_URL";
	}
}

my %check_command = (
	"add-hash" => sub {
		set_var($ARGV[0]);

		$state{value} = $ARGV[1];
		length($ARGV[1]) == 64 or die "Invalid hash value\n";
	},
	"fix-hash" => sub {
		set_var($ARGV[0]);

		$state{value} = $ARGV[1];
		$state{prev_value} = $ARGV[2];

		length($ARGV[1]) == 64 or die "Invalid hash value\n";
	},
	"rename-var" => sub {
		set_var($ARGV[0]);
		$state{new_var} = $ARGV[1];
		$state{new_var} =~ s/.*://g;
	},
);

sub check_context($) {
	my $line = shift;
	return unless $state{template};

	$state{next} and do {
		$state{context} = 1;
		undef $state{next};
		return;
	};

	if (not $state{context}) {
		$line =~ /^\s*define\s+$state{template}/ and $state{next} = 1;
	} else {
		$line =~ /^\s*endef/ and do {
			$state{done} = 1;
			undef $state{context};
		}
	}
}

my %commands = (
	"add-hash" => sub {
		my $line = shift;
		check_context($line);
		return $line unless $state{context};

		# skip existing hash variable
		return "" if $line =~ /^(\s*)$state{var}(\s*):?=(\s*)(.*)\n/;

		# insert md5sum after related variable
		return $line unless $line =~ /^(\s*)$state{related_var}(\s*):?=(\s*)(.*)\n/;
		return "$line$1$state{var}$2:=$3$state{value}\n";
	},
	"fix-hash" => sub {
		my $line = shift;
		check_context($line);
		return $line unless $state{context};
		return $line unless $line =~ /^(\s*)$state{var}(\s*):?=(\s*)(.*)$state{prev_value}(.*)\n/;
		$state{done} = 1;
		$4 =~ /\$/ and do {
			warn "$state{var} contains a reference to another variable, can't fix automatically\n";
			return $line;
		};
		return "$1$state{var}$2:=$3$state{value}\n";
	},
	"rename-var" => sub {
		my $line = shift;
		check_context($line);
		return $line unless $state{context};
		return $line unless $line =~ /^(\s*)$state{var}(\s*:?=.*)\n/;
		return "$1$state{new_var}$2\n";
	},
);

my $file = shift @ARGV;
my $command = shift @ARGV;

($file and $command and $check_command{$command}) or usage;
&{$check_command{$command}}();

-f $file or die "File $file not found\n";

open IN, "<${file}" or die "Cannot open input file\n";
open OUT, ">${file}.new" or die "Cannot open output file\n";

my $cmd = $commands{$command};
while (my $line = <IN>) {
	$line = &$cmd($line) unless $state{done};
	print OUT $line;
	last if $error;
}

close OUT;
close IN;

$error and do {
	unlink "${file}.new";
	exit 1;
};

rename "${file}.new", "$file";
"o">*ptr, unsigned long val); void xen_l2_entry_update(pmd_t *ptr, unsigned long val); void xen_pt_switch(unsigned long ptr); void xen_tlb_flush(void); void xen_invlpg(unsigned long ptr); void xen_pgd_pin(unsigned long ptr); void xen_pgd_unpin(unsigned long ptr); void xen_pte_pin(unsigned long ptr); void xen_pte_unpin(unsigned long ptr); void xen_set_ldt(unsigned long ptr, unsigned long bytes); void xen_machphys_update(unsigned long mfn, unsigned long pfn); void _flush_page_update_queue(void); static inline int flush_page_update_queue(void) { unsigned int idx = mmu_update_queue_idx; if ( idx != 0 ) _flush_page_update_queue(); return idx; } #define xen_flush_page_update_queue() (_flush_page_update_queue()) #define XEN_flush_page_update_queue() (_flush_page_update_queue()) void MULTICALL_flush_page_update_queue(void); #ifdef CONFIG_XEN_PHYSDEV_ACCESS /* Allocate a contiguous empty region of low memory. Return virtual start. */ unsigned long allocate_empty_lowmem_region(unsigned long pages); #endif /* * Assembler stubs for hyper-calls. */ static inline int HYPERVISOR_set_trap_table( trap_info_t *table) { int ret; unsigned long ignore; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ignore) : "0" (__HYPERVISOR_set_trap_table), "1" (table) : "memory" ); return ret; } static inline int HYPERVISOR_mmu_update( mmu_update_t *req, int count, int *success_count) { int ret; unsigned long ign1, ign2, ign3; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3) : "0" (__HYPERVISOR_mmu_update), "1" (req), "2" (count), "3" (success_count) : "memory" ); return ret; } static inline int HYPERVISOR_set_gdt( unsigned long *frame_list, int entries) { int ret; unsigned long ign1, ign2; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2) : "0" (__HYPERVISOR_set_gdt), "1" (frame_list), "2" (entries) : "memory" ); return ret; } static inline int HYPERVISOR_stack_switch( unsigned long ss, unsigned long esp) { int ret; unsigned long ign1, ign2; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2) : "0" (__HYPERVISOR_stack_switch), "1" (ss), "2" (esp) : "memory" ); return ret; } static inline int HYPERVISOR_set_callbacks( unsigned long event_selector, unsigned long event_address, unsigned long failsafe_selector, unsigned long failsafe_address) { int ret; unsigned long ign1, ign2, ign3, ign4; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4) : "0" (__HYPERVISOR_set_callbacks), "1" (event_selector), "2" (event_address), "3" (failsafe_selector), "4" (failsafe_address) : "memory" ); return ret; } static inline int HYPERVISOR_fpu_taskswitch( void) { int ret; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret) : "0" (__HYPERVISOR_fpu_taskswitch) : "memory" ); return ret; } static inline int HYPERVISOR_yield( void) { int ret; unsigned long ign; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign) : "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_yield) : "memory" ); return ret; } static inline int HYPERVISOR_block( void) { int ret; unsigned long ign1; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1) : "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_block) : "memory" ); return ret; } static inline int HYPERVISOR_shutdown( void) { int ret; unsigned long ign1; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1) : "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_shutdown | (SHUTDOWN_poweroff << SCHEDOP_reasonshift)) : "memory" ); return ret; } static inline int HYPERVISOR_reboot( void) { int ret; unsigned long ign1; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1) : "0" (__HYPERVISOR_sched_op), "1" (SCHEDOP_shutdown | (SHUTDOWN_reboot << SCHEDOP_reasonshift)) : "memory" ); return ret; } static inline int HYPERVISOR_suspend( unsigned long srec) { int ret; unsigned long ign1, ign2; /* NB. On suspend, control software expects a suspend record in %esi. */ __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=S" (ign2) : "0" (__HYPERVISOR_sched_op), "b" (SCHEDOP_shutdown | (SHUTDOWN_suspend << SCHEDOP_reasonshift)), "S" (srec) : "memory"); return ret; } static inline long HYPERVISOR_set_timer_op( u64 timeout) { int ret; unsigned long timeout_hi = (unsigned long)(timeout>>32); unsigned long timeout_lo = (unsigned long)timeout; unsigned long ign1, ign2; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2) : "0" (__HYPERVISOR_set_timer_op), "b" (timeout_hi), "c" (timeout_lo) : "memory"); return ret; } static inline int HYPERVISOR_dom0_op( dom0_op_t *dom0_op) { int ret; unsigned long ign1; dom0_op->interface_version = DOM0_INTERFACE_VERSION; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1) : "0" (__HYPERVISOR_dom0_op), "1" (dom0_op) : "memory"); return ret; } static inline int HYPERVISOR_set_debugreg( int reg, unsigned long value) { int ret; unsigned long ign1, ign2; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2) : "0" (__HYPERVISOR_set_debugreg), "1" (reg), "2" (value) : "memory" ); return ret; } static inline unsigned long HYPERVISOR_get_debugreg( int reg) { unsigned long ret; unsigned long ign; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign) : "0" (__HYPERVISOR_get_debugreg), "1" (reg) : "memory" ); return ret; } static inline int HYPERVISOR_update_descriptor( unsigned long ma, unsigned long word1, unsigned long word2) { int ret; unsigned long ign1, ign2, ign3; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3) : "0" (__HYPERVISOR_update_descriptor), "1" (ma), "2" (word1), "3" (word2) : "memory" ); return ret; } static inline int HYPERVISOR_set_fast_trap( int idx) { int ret; unsigned long ign; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign) : "0" (__HYPERVISOR_set_fast_trap), "1" (idx) : "memory" ); return ret; } static inline int HYPERVISOR_dom_mem_op( unsigned int op, unsigned long *extent_list, unsigned long nr_extents, unsigned int extent_order) { int ret; unsigned long ign1, ign2, ign3, ign4, ign5; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4), "=D" (ign5) : "0" (__HYPERVISOR_dom_mem_op), "1" (op), "2" (extent_list), "3" (nr_extents), "4" (extent_order), "5" (DOMID_SELF) : "memory" ); return ret; } static inline int HYPERVISOR_multicall( void *call_list, int nr_calls) { int ret; unsigned long ign1, ign2; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2) : "0" (__HYPERVISOR_multicall), "1" (call_list), "2" (nr_calls) : "memory" ); return ret; } static inline int HYPERVISOR_update_va_mapping( unsigned long page_nr, pte_t new_val, unsigned long flags) { int ret; unsigned long ign1, ign2, ign3; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3) : "0" (__HYPERVISOR_update_va_mapping), "1" (page_nr), "2" ((new_val).pte_low), "3" (flags) : "memory" ); if ( unlikely(ret < 0) ) { printk(KERN_ALERT "Failed update VA mapping: %08lx, %08lx, %08lx\n", page_nr, (new_val).pte_low, flags); BUG(); } return ret; } static inline int HYPERVISOR_event_channel_op( void *op) { int ret; unsigned long ignore; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ignore) : "0" (__HYPERVISOR_event_channel_op), "1" (op) : "memory" ); return ret; } static inline int HYPERVISOR_xen_version( int cmd) { int ret; unsigned long ignore; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ignore) : "0" (__HYPERVISOR_xen_version), "1" (cmd) : "memory" ); return ret; } static inline int HYPERVISOR_console_io( int cmd, int count, char *str) { int ret; unsigned long ign1, ign2, ign3; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3) : "0" (__HYPERVISOR_console_io), "1" (cmd), "2" (count), "3" (str) : "memory" ); return ret; } static inline int HYPERVISOR_physdev_op( void *physdev_op) { int ret; unsigned long ign; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign) : "0" (__HYPERVISOR_physdev_op), "1" (physdev_op) : "memory" ); return ret; } static inline int HYPERVISOR_grant_table_op( unsigned int cmd, void *uop, unsigned int count) { int ret; unsigned long ign1, ign2, ign3; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3) : "0" (__HYPERVISOR_grant_table_op), "1" (cmd), "2" (count), "3" (uop) : "memory" ); return ret; } static inline int HYPERVISOR_update_va_mapping_otherdomain( unsigned long page_nr, pte_t new_val, unsigned long flags, domid_t domid) { int ret; unsigned long ign1, ign2, ign3, ign4; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2), "=d" (ign3), "=S" (ign4) : "0" (__HYPERVISOR_update_va_mapping_otherdomain), "1" (page_nr), "2" ((new_val).pte_low), "3" (flags), "4" (domid) : "memory" ); return ret; } static inline int HYPERVISOR_vm_assist( unsigned int cmd, unsigned int type) { int ret; unsigned long ign1, ign2; __asm__ __volatile__ ( TRAP_INSTR : "=a" (ret), "=b" (ign1), "=c" (ign2) : "0" (__HYPERVISOR_vm_assist), "1" (cmd), "2" (type) : "memory" ); return ret; } #endif /* __HYPERVISOR_H__ */